package com.woniu.commons.util;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

public class DateUtils {

    // 常见的日期格式
    private static final String[] DATE_FORMATS = {
            "yyyy-MM-dd",
            "yyyyMMdd",
            "yyyy/MM/dd"
    };

    // 常见的日期时间格式
    private static final String[] DATETIME_FORMATS = {
            "yyyy-MM-dd HH:mm:ss",
            "yyyyMMddHHmmss",
            "yyyy/MM/dd HH:mm:ss"
    };

    /**
     * 将字符串转换为 LocalDate
     *
     * @param dateStr 日期字符串
     * @return 转换后的 LocalDate 对象
     * @throws IllegalArgumentException 如果无法解析日期字符串
     */
    public static LocalDate parseToLocalDate(String dateStr) {
        if (dateStr == null || dateStr.isEmpty()) {
            throw new IllegalArgumentException("日期字符串不能为空");
        }

        for (String format : DATE_FORMATS) {
            try {
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
                return LocalDate.parse(dateStr, formatter);
            } catch (DateTimeParseException ignored) {
                // 忽略异常，尝试下一个格式
            }
        }
        throw new IllegalArgumentException("无法解析日期字符串：" + dateStr);
    }

    /**
     * 将字符串转换为 LocalDateTime
     *
     * @param dateTimeStr 日期时间字符串
     * @return 转换后的 LocalDateTime 对象
     * @throws IllegalArgumentException 如果无法解析日期时间字符串
     */
    public static LocalDateTime parseToLocalDateTime(String dateTimeStr) {
        if (dateTimeStr == null || dateTimeStr.isEmpty()) {
            throw new IllegalArgumentException("日期时间字符串不能为空");
        }

        for (String format : DATETIME_FORMATS) {
            try {
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
                return LocalDateTime.parse(dateTimeStr, formatter);
            } catch (DateTimeParseException ignored) {
                // 忽略异常，尝试下一个格式
            }
        }
        throw new IllegalArgumentException("无法解析日期时间字符串：" + dateTimeStr);
    }
}
